package br.com.webhomesites.padrao.presenter;

import br.com.webhomesites.padrao.contracts.IComposicaoProdutoView;
import br.com.webhomesites.padrao.model.ComposicaoProdutoDAO;
import br.com.webhomesites.padrao.model.ComposicaoProdutoModel;
import br.com.webhomesites.padrao.model.ItemComposicaoProdutoDAO;
import br.com.webhomesites.padrao.model.ProdutoDAO;
import br.com.webhomesites.padrao.utils.Mascarador;
import br.com.webhomesites.padrao.view.ComposicaoProdutoView;
import java.awt.Component;
import java.awt.event.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JOptionPane;

public class ComposicaoProdutoPresenterActionListeners {

    static class AlterarActionListener implements ActionListener {

        private ComposicaoProdutoPresenter presenter;

        public AlterarActionListener(ComposicaoProdutoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.UPDATE_STRATEGY);
            presenter.habilitarEdicao(true);

            IComposicaoProdutoView view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();

            view.enableBtnInserirItem(true);
            view.enableBtnRemoverItem(true);
            view.enableBtnCancelarComposicaoProduto(true);
            view.enableBtnSalvarComposicaoProduto(true);
            //view.enableBtnAlterar(true); 

        }
    }

    static class CancelarComposicaoProdutoActionListener implements ActionListener {

        private ComposicaoProdutoPresenter presenter;

        public CancelarComposicaoProdutoActionListener(ComposicaoProdutoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {

            IComposicaoProdutoView view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();

            view.clearFieldsPainelComposicaoProduto();
            
            view.enableBtnNovaComposicaoProduto(true);
            view.enableBtnCancelarComposicaoProduto(false);
            view.enableBtnSalvarComposicaoProduto(false);


        }
    }

    static class CancelarItemComposicaoProdutoActionListener implements ActionListener {

        private ComposicaoProdutoPresenter presenter;

        public CancelarItemComposicaoProdutoActionListener(ComposicaoProdutoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {

            IComposicaoProdutoView view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();

            view.clearFields();

            //presenter.habilitarEdicao(false);  
            view.clearFieldsPainelIncluirProdutoAcessorio();
            //view.setComboProdutosFocus();

            view.enableBtnInserirItem(true);
            view.enableBtnRemoverItem(false);
            view.enableBtnCancelarItem(false);
            view.enableBtnSalvarItem(false);

        }
    }

    static class SalvarComposicaoProdutoActionListener implements ActionListener {

        private ComposicaoProdutoPresenter presenter;

        public SalvarComposicaoProdutoActionListener(ComposicaoProdutoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.getOperacao().execute();
            //presenter.setOperacao(presenter.UPDATE_STRATEGY);
            //presenter.habilitarEdicao(false);  

            //setUpViewListeners();

            IComposicaoProdutoView view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();

            view.enableBtnNovaComposicaoProduto(true);
            view.enableBtnCancelarComposicaoProduto(false);
            view.enableBtnSalvarComposicaoProduto(false);
            view.enableBtnSalvarItem(false);
            view.enableBtnCancelarItem(false);
            view.enableBtnRemoverItem(false);
            view.enableBtnInserirItem(true);

        }
    }

    static class SalvarItemComposicaoProdutoActionListener implements ActionListener {

        private ComposicaoProdutoPresenter presenter;

        public SalvarItemComposicaoProdutoActionListener(ComposicaoProdutoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.getOperacao().execute();
            presenter.setOperacao(presenter.INSERT_ITEM_STRATEGY);
            //presenter.habilitarEdicao(false);  

            //setUpViewListeners();

            IComposicaoProdutoView view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();

            view.enableBtnInserirItem(true);
            view.enableBtnSalvarItem(false);
            view.enableBtnCancelarItem(false);
            view.enableBtnRemoverItem(false);

            System.out.println("Passou na ação salvar!");

        }
    }

    static class InserirComposicaoProdutoActionListener implements ActionListener {

        private ComposicaoProdutoPresenter presenter;

        public InserirComposicaoProdutoActionListener(ComposicaoProdutoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.INSERT_STRATEGY);
            presenter.novoComposicaoProduto();
            System.out.println("Nova composição");
            IComposicaoProdutoView view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();

            presenter.habilitarEdicao(true);
            //view.clearFieldsPainelComposicaoProduto();
            //view.clearFieldsPainelIncluirProdutos();

            Calendar cal = Calendar.getInstance();
            Date date = cal.getTime();
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
           

            view.enableBtnNovaComposicaoProduto(false);
            view.enableBtnSalvarComposicaoProduto(true);
            view.enableBtnCancelarComposicaoProduto(true);

            view.enableBtnInserirItem(false);
            view.enableBtnSalvarItem(false);
            view.enableBtnRemoverItem(false);
            view.enableBtnCancelarItem(false);

            //view.clearTableItensComposicaoProduto();
        }
    }
    
    static class BuscaAvancadaActionlistener implements ActionListener {
        
        ComposicaoProdutoPresenter presenter;

        public BuscaAvancadaActionlistener(ComposicaoProdutoPresenter presenter) {
           this.presenter = presenter;
        }
        
        @Override
        public void actionPerformed(ActionEvent e) {
            presenter.buscaAvancada();
            
            IComposicaoProdutoView view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();

            view.enableBtnInserirItem(true);
            view.enableBtnRemoverItem(false);
            
        }
        
    }

    static class InserirItemComposicaoProdutoActionListener implements ActionListener {

        private ComposicaoProdutoPresenter presenter;

        public InserirItemComposicaoProdutoActionListener(ComposicaoProdutoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
            presenter.setOperacao(presenter.INSERT_ITEM_STRATEGY);
            presenter.novoItemComposicaoProduto();
            System.out.println("Inserindo item na composição");
            IComposicaoProdutoView view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();

            presenter.habilitarEdicao(true);
            view.clearFields();

            view.enableTxtQuantidade(true);
            view.enableBtnInserirItem(false);
            view.enableBtnSalvarItem(true);
            view.enableBtnCancelarItem(true);
            view.enableBtnRemoverItem(false);

        }
    }

    static class RemoverItemComposicaoProdutoActionListener implements ActionListener {

        private ComposicaoProdutoPresenter presenter;

        public RemoverItemComposicaoProdutoActionListener(ComposicaoProdutoPresenter presenter) {
            this.presenter = presenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {

            if (JOptionPane.showConfirmDialog((Component) presenter.getComposicaoProdutoView(), "Deseja remover?", "Pergunta", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {

                IComposicaoProdutoView view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();

                presenter.setOperacao(presenter.REMOVE_ITEM_STRATEGY);
                presenter.getOperacao().execute();
                view.clearFields();

                view.enableBtnInserirItem(true);
                view.enableBtnSalvarItem(false);
                view.enableBtnCancelarItem(false);
                view.enableBtnRemoverItem(false);

            }
        }
    }

    static class SairActionListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent evt) {
            System.exit(0);
        }
    }

    static class CampoKeyListener implements KeyListener {

        private ComposicaoProdutoPresenter presenter;
        IComposicaoProdutoView view;
        Mascarador mask;

        public CampoKeyListener(ComposicaoProdutoPresenter presenter) {
            this.presenter = presenter;
            this.view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();
            mask = new Mascarador();
        }

        @Override
        public void keyTyped(KeyEvent e) {
            //throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public void keyPressed(KeyEvent e) {
            //throw new UnsupportedOperationException("Not supported yet.");
        }

        @Override
        public void keyReleased(KeyEvent e) {
//            view.setDataComposicaoProduto(mask.getMascara(view.getDataComposicaoProduto(), mask.DATA, e));
//            view.setDataPrevDevolucao(mask.getMascara(view.getDataPrevDevolucao(), mask.DATA, e));
//            view.setValorItemComposicaoProduto(mask.getMascara(view.getValorItemComposicaoProduto(), mask.MOEDA, e));
//            view.setValorProdutoComposicaoProduto(mask.getMascara(view.getValorItemComposicaoProduto(), mask.MOEDA, e));
//            view.setValorTotalComposicaoProduto(mask.getMascara(view.getValorItemComposicaoProduto(), mask.MOEDA, e));
//            DecimalFormat df = new DecimalFormat("##,###.00");
//            //view.setValorProdutoComposicaoProduto(df.format(view.getValorProdutoComposicaoProduto()));
//            Currency cur = new Currency();
//            System.out.println(cur.getMoeda(Double.toString(view.getValorProdutoComposicaoProduto())));
        }
    }

    static class ComboStateListener implements ItemListener {

        private ComposicaoProdutoPresenter presenter;
        IComposicaoProdutoView view;

        public ComboStateListener(ComposicaoProdutoPresenter presenter) {
            this.presenter = presenter;
            this.view = (IComposicaoProdutoView) presenter.getComposicaoProdutoView();

        }

        @Override
        public void itemStateChanged(ItemEvent ie) {
            if(ie.getSource() == presenter.getComposicaoProdutoView().getComboDescricaoProdutoComposto()) {
            System.out.println("Mudou de composto");
            ProdutoDAO produtoDAO = new ProdutoDAO();
            System.out.println("Descrição " + view.getDescricaoProdutoComposto());
            presenter.setProdutoModel(produtoDAO.findByDescricaoUnica(view.getDescricaoProdutoComposto()));
            presenter.updateViewComposicaoFromProdutoModel();
            } 
            if(ie.getSource() == presenter.getComposicaoProdutoView().getComboDescricaoProdutoAcessorio()) {
            System.out.println("Mudou de acessorio");
            ProdutoDAO produtoDAO = new ProdutoDAO();
            presenter.setProdutoModel(produtoDAO.findByDescricaoUnica(view.getDescricaoProdutoAcessorio()));
            presenter.updateViewAcessorioFromProdutoModel();
            }
            
        }
    }

    static class EnterListener implements ActionListener {

        private ComposicaoProdutoPresenter composicaoPresenter;

        public EnterListener(ComposicaoProdutoPresenter locacaoPresenter) {
            this.composicaoPresenter = locacaoPresenter;
        }

        @Override
        public void actionPerformed(ActionEvent evt) {
             ComposicaoProdutoDAO composicaoProdutoDAO = new ComposicaoProdutoDAO();
             composicaoPresenter.setComposicaoProdutoModel(composicaoProdutoDAO.getById(composicaoPresenter.getComposicaoProdutoView().getCodigoProdutoComposto()));
             composicaoPresenter.updateViewComposicaoFromModel();
             
             ItemComposicaoProdutoDAO itemComposicaoProdutoDAO = new ItemComposicaoProdutoDAO();
             //composicaoPresenter.get

        }
    }

    static class TableItensMouseListener extends MouseAdapter {

        private ComposicaoProdutoPresenter composicaoProdutoPresenter;

        public TableItensMouseListener(ComposicaoProdutoPresenter composicaoProdutoPresenter) {
            this.composicaoProdutoPresenter = composicaoProdutoPresenter;
        }

        @Override
        public void mouseClicked(MouseEvent e) {

            composicaoProdutoPresenter.updateModelFromJTable();

            //ComposicaoProdutoPresenter.habilitarEdicao(false);
            System.out.println("Atualizando tabela acessórios");
            IComposicaoProdutoView composicaoProdutoView = (ComposicaoProdutoView) composicaoProdutoPresenter.getComposicaoProdutoView();

            composicaoProdutoView.enableBtnCancelarItem(false);
            composicaoProdutoView.enableBtnSalvarItem(false);
            composicaoProdutoView.enableBtnInserirItem(true);
            composicaoProdutoView.enableBtnRemoverItem(true);

        }
    }

   

    static class LostFocusListener implements FocusListener {

        private ComposicaoProdutoPresenter locacaoPresenter;

        public LostFocusListener(ComposicaoProdutoPresenter locacaoPresenter) {
            this.locacaoPresenter = locacaoPresenter;
        }

        @Override
        public void focusGained(FocusEvent e) {
     
        }

        @Override
        public void focusLost(FocusEvent e) {
//            DecimalFormat df = new DecimalFormat("##,###.00");
//            locacaoPresenter.getComposicaoProdutoView().setValorProdutoComposicaoProduto(df.format(locacaoPresenter.getComposicaoProdutoView().getValorProdutoComposicaoProduto()));
          
        }
    }

    
    
}
